题目描述
原题
Description:
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Follow up:
Could you do this in one pass?
原题翻译
描述:
给定一个链表,请删除链表尾部起第n个节点,然后返回其头部。
例如:
给定链表:1->2->3->4->5, 和 n = 2。
删除尾部第二个节点后,链表变成 1->2->3->5。
另外:
给定n将始终有效。
提高:
你能否一次通过?
解法一(mine)
主要思想
创建一个队列,先进先出,长度固定为n+1。
遍历链表,将元素放入队列。
遍历完成后,队列中第二个元素即为要删除的元素。
运行速度:超过了10.92%的解答。
内存使用:超过了100%的解答。
源码
1 | /** |
解法二
主要思想
使用快慢指针
先使用快指针遍历链表。
当快指针指向要删除的目标元素时,开始使用慢指针遍历链表。
当快指针结束时,慢指针刚好指向要删除的元素的前一个。
修改慢指针所指向元素的next即可。
运行速度:超过了100%的解答。
内存使用:超过了100%的解答。
源码
1 | /** |